package chain;

/**
 * 责任链模式
 *  构建一个处理流水线，对一次请求进行多次处理
 *  1. 处理类，将请求放到第一个处理程序
 *  2. 具体处理类，按照链条顺序进行处理
 * =>
 *  SpringMVC的拦截器，都实现了HandlerInterceptor接口；HandlerExecutionChain形成链，提供添加和移除功能；还有执行方法
 *  1. 解耦后端庞大的流程处理
 *  2. 可动态更换流程中的对象(过程)
 *  3. 处理一些需要遍历的列表，如权限过滤
 */
public class ChainTest {
    public static void main(String[] args) {
        //请求
        Request request = new Request("qWERtyuIOP");

        //处理
        HandlerA handlerA = new HandlerA();
        HandlerB handlerB = new HandlerB();
        HandlerC handlerC = new HandlerC();
        handlerA.setNext(handlerB);
        handlerB.setNext(handlerC);

        //从头部开始
        handlerA.handle(request);
    }
}
